# Ввести три числа одинарной точности A, B и C, и вычислить формулу A/(B*C), именно в таком порядке — сначала умножение, затем деление.
# Для каждого действия (умножения и деления) проверять состояние четырёх флагов fcsr — NX, UF, OF и DZ, в указанном порядке, и выводить соответствующую строку из двух букв,
# если флаг ненулевой. Не забыть очистить fcsr перед вторым действием! Затем вывести результат.


.data
NX:	.asciz	"NX\n"
UF:	.asciz	"UF\n"
OF:	.asciz	"OF\n"
DZ:	.asciz	"DZ\n"

.text
Begin:
        li	a7, 6
	ecall
	fmv.s   fs1 fa0		# Это A
	ecall
	fmv.s   fs2 fa0		# Это B
	ecall
	fmv.s   fs3 fa0		# Это C
	
	fmul.s	ft1 fs2 fs3	# B*C
	frflags	t0
	
.nx1:	andi	t1 t0 1		# Проверка NX
	beqz	t1 .uf1
	la      a0, NX
	li      a7, 4
        ecall	
.uf1:	andi	t1 t0 2		# Проверка UF
	beqz	t1 .of1
	la      a0, UF
	li      a7, 4
        ecall	
.of1:	andi	t1 t0 4		# Проверка OF
	beqz	t1 .dz1
	la      a0, OF
	li      a7, 4
        ecall
.dz1:	andi	t1 t0 8		# Проверка DZ
	beqz	t1 .next
	la      a0, DZ
	li      a7, 4
        ecall        
.next:	fscsr	zero
  
	fdiv.s	ft1 fs1 ft1	# A/(B*C)
	frflags	t0
	
.nx2:	andi	t1 t0 1		# Проверка NX
	beqz	t1 .uf2
	la      a0, NX
	li      a7, 4
        ecall	
.uf2:	andi	t1 t0 2		# Проверка UF
	beqz	t1 .of2
	la      a0, UF
	li      a7, 4
        ecall	
.of2:	andi	t1 t0 4		# Проверка OF
	beqz	t1 .dz2
	la      a0, OF
	li      a7, 4
        ecall
.dz2:	andi	t1 t0 8		# Проверка DZ
	beqz	t1 .print
	la      a0, DZ
	li      a7, 4
        ecall        
.print:	fmv.s	fa0 ft1
	li      a7, 2
        ecall
        				      				      				
.exit:  li      a7, 10
        ecall
